package com.prueba.server.persistence;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import org.omg.CORBA.portable.OutputStream;

import com.prueba.shared.entity.Persona;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.mongodb.*;

public class PersonaDAO extends EntityManager{

	private BasicDBObject query = new BasicDBObject();
	private final String RUTAXML = "/home/desarrollo/Documentos/";
	
	public PersonaDAO() {
		super("persona");
		
	}

	public void insertar(Persona persona){

		System.out.println("ENTRE A INSERTAR");
		
		String idPersona = getNextId(db, "idPersona");
		
		BasicDBObject doc = new BasicDBObject();
		
		doc.put("idPersona", idPersona);
        doc.put("nombres", "JORGEENRIQUE");
        doc.put("apellidos", persona.getApellidos());
        doc.put("email", persona.getEmail());
        doc.put("fechaNacimiento", persona.getFechaNacimiento());
        doc.put("productos", persona.listaProductosToString());

        
        collection.insert(doc);        
        
        this.generarXml(idPersona, persona);
        
		
//        DBObject myDoc = collection.findOne();
//        System.out.println(myDoc);
        
//        query = new BasicDBObject();
//
//        query.put("nombres", "JORGEENRIQUE");
////
//        DBCursor cur = collection.find(query);
////
//        
//        System.out.println("TOTAL:"+cur.count());
//        while(cur.hasNext()) {
//            System.out.println(cur.next());
//        }
        
        
	}
	
	public static String getNextId(DB db, String seq_name) {
		
		
	    String sequence_collection = "ids"; // Nombre de la coleccion
	    String sequence_field = "id"; // Nombre del campo con el valor del id
	 
	    DBCollection seq = db.getCollection(sequence_collection); 
	 
	    DBObject query = new BasicDBObject();
	    query.put("_id", seq_name); // where _id = el nombre ingresado de la secuencia
	 
	    // Los siguientes objetos representan la actualizacion de los campos
	    DBObject change = new BasicDBObject(sequence_field, 1);
	    DBObject update = new BasicDBObject("$inc", change); // the $inc es un comando en mongodb para autoincrementar
	 
	    //Actualizacion del campo
	    seq.update(query, update);
	    
	    DBCursor cur = seq.find(query);
	    
	    return cur.next().get(sequence_field).toString();
	    
	}
	
	public void generarXml(String idPersona, Persona persona){

		 XStream xstream = new XStream(new DomDriver());
		 
		 xstream.alias("Persona", Persona.class);
		 
		 File archvioXml = new File(RUTAXML+"Persona_"+idPersona+".xml");
		 
		 FileOutputStream archivo;

			try {
				archivo = new FileOutputStream(archvioXml);
				xstream.toXML(this, archivo);
			} catch (FileNotFoundException e) {

				e.printStackTrace();
			}
			
	}
	

	
	
	
}
